package com.itheima.controller;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.itheima.common.R;
import com.itheima.pojo.Category;
import com.itheima.pojo.Dish;
import com.itheima.pojo.Setmeal;
import com.itheima.service.CategoryService;
import com.itheima.service.DishService;
import com.itheima.service.SetmealService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/category")
public class CategoryController {
    @Autowired
    CategoryService categoryService;
    @Autowired
    DishService dishService;
    @Autowired
    SetmealService setmealService;

    @Autowired
    RedisTemplate redisTemplate;
    /*请求url地址： /category
    请求方式：POST
    请求参数：JSON格式的
    {"name":"徽菜",
    "type":"1", //1 菜品分类  2套餐分类"sort":"1"}*/
    @PostMapping
    public R savaAdd(@RequestBody Category category){

        //判断数据库中数据是否重复
        QueryWrapper<Category> wrapper = new QueryWrapper<>();
        wrapper.lambda().eq(Category::getName,category.getName());
        Category one = categoryService.getOne(wrapper);

        if(one!=null){
            return R.error("菜品已存在");
        }
        categoryService.save(category);
        /**
         * 添加套餐信息 添加完成后 清空缓存信息 重新在查询方法中注入
         */
        //redisTemplate.delete("dish_" + category.getId() +"_");
        return R.success("category");
    }

    /*请求url地址： /category/page      ?page=1&pageSize=10
    请求方式：GET
    请求参数：?page=1&pageSize=10*/
    @GetMapping("/page")
    public R getPage(int page,int pageSize){
        QueryWrapper<Category> wrapper = new QueryWrapper<>();
        wrapper.lambda().orderByAsc(Category::getSort);
        Page<Category> iPage = new Page<>(page,pageSize);
        categoryService.page(iPage,wrapper);
        return R.success(iPage);
    }


    /*请求url地址： /category ?id=1504008529740996610
    请求方式：DELETE
    请求参数：?id=1504008529740996610
    响应结果【格式统一】：R 对象*/
    @DeleteMapping
    public R delete(Long id){
        //删除分类 传入的id可能是菜品分类 也可能是套餐分类
        //删除之前还需要判断分类中是否还有数据 如果有数据则不可删除
        //获取id对应的分类
        QueryWrapper<Category> wrapper = new QueryWrapper<>();
        wrapper.lambda().eq(Category::getId, id);
        Category one = categoryService.getOne(wrapper);
        Integer type = one.getType();
        if(type==1){
            QueryWrapper<Dish> wrapper1 = new QueryWrapper();
            wrapper1.lambda().eq(Dish::getCategoryId,id);
            List<Dish> list = dishService.list(wrapper1);
            if(list.size()>0){
                return R.error("菜品分类中还有存在菜品");
            }
        }
        if(type==2){
            QueryWrapper<Setmeal> wrapper1 = new QueryWrapper<>();
            wrapper1.lambda().eq(Setmeal::getCategoryId, id);
            List<Setmeal> list = setmealService.list(wrapper1);
            if(list.size()>0){
                return R.error("套餐中还有餐品未删除");
            }
        }
        categoryService.removeById(one);
        /**
         * 删除套餐 清空该套餐的缓存信息
         */
        //redisTemplate.delete("dish_"+id);
        return R.success("category");
    }

    /*接口二：修改分类
    请求url地址： /category
    请求方式：PUT
    请求参数：JSON格式的数据*/
    @PutMapping
    public R update(@RequestBody Category category){
        categoryService.updateById(category);
        /**
         * 修改分类后清空缓存信息
         */
        //redisTemplate.delete("dish_"+category.getId());
        return R.success("category");
    }

    /*###### 接口1：查询菜品分类列表数据
    请求url地址：/category/list ?type=1
    请求方式：GET
    请求参数：?type=1*/

    /*@GetMapping("/list")
    public R dishList(Integer type){
        //查询菜品
        QueryWrapper<Category> wrapper = new QueryWrapper<>();
        wrapper.lambda().eq(Category::getType,type);
        wrapper.lambda().orderByAsc(Category::getSort);
        List<Category> list = categoryService.list(wrapper);
        return R.success(list);
    }*/

    @GetMapping("/list")
    public R dishList(Integer type){
        /**
         * 查询菜品 判断缓存信息在缓存中是否存在
         */
        //查询菜品
        if(type==null){
            List<Category> list = categoryService.list();
            return R.success(list);
        }
        QueryWrapper<Category> wrapper = new QueryWrapper<>();
        wrapper.lambda().eq(Category::getType,type);
        wrapper.lambda().orderByAsc(Category::getSort);
        List<Category> list = categoryService.list(wrapper);
        return R.success(list);
    }


}
